package timer

import (
	"fmt"
	"time"
)

func TestTimer() {
	// 获取一个定时器
	var timer = time.NewTimer(2 * time.Millisecond)
	// 在Timer中：C <-chan Time
	timeCh := timer.C
	// 通过定时器获取的time工具执行后需要等待定时器指定的时间
	t := <-timeCh
	// 2秒后输出内容
	fmt.Println(t.Date())
	// 再次获取panic
	//t1 :=<- timeCh
	//fmt.Println(t1.Date())

	// 可以通过 <-timer.C 实现延迟效果
	var timer1 = time.NewTimer(2 * time.Millisecond)
	// 延迟效果
	<-timer1.C
	fmt.Println("这里的输出被延迟")

	// 关闭定时器
	b := timer1.Stop()
	if b {
		fmt.Println("定时器已关闭")
	}

	// 内部使用的也是 NewTimer的C通道实现的延迟
	time.After(2)
}

// Ticker可以多次执行
func TestTicker() {
	// 1.获取ticker对象
	ticker := time.NewTicker(1 * time.Second)
	i := 0
	// 子协程
	go func() {
		for {
			//<-ticker.C
			i++
			fmt.Println(<-ticker.C)
			if i == 5 {
				//停止
				ticker.Stop()
			}
		}
	}()

	for {
	}
}
